#include <iostream>

#include "mprpcapplication.h" // 包含框架的配置头文件
#include "user.pb.h" //调用远程发布的rpc方法：Login() 客户端采用xxx_stub
#include "mprpcchannel.h"


int main(int argc, char ** argv)
{
    // 整个程序启动以后， 想使用mprpc框架来享受rpc服务调用，一定需要先调用框架的初始化函数(只初始化一次)
    MprpcApplication::Init(argc, argv); 

    fixbug::UserServiceRpc_Stub stub(new MprpcChannel());
    // 设置rpc请示及参数
    fixbug::LoginRequest request;
    request.set_name("zhang san");
    request.set_pwd("123789");

    // 设置rpc响应及参数
    fixbug::LoginResponse response;
    // 发送rpc方法的调用，同步的rpc调用过程 MprpcChannel::callmethod
    stub.Login(nullptr, &request, &response, nullptr);

    // 一次rpc调用完成， 读调用的结果 
    if (0 == response.result().errcode())
    {
        std::cout << "rpc login response:" << response.success() << std::endl;
    }
    else 
    {
        std::cout << "rpc login response error:" << response.result().errmsg() << std::endl;
    }

    // 演示调用远程发布的rpc方法的Register方法
    fixbug::RegisterRequest req; 
    req.set_id(100);
    req.set_name("mprpc");
    req.set_pwd("666666");
    fixbug::RegisterResponse rsp;
    stub.Register(nullptr, &req, &rsp, nullptr); // 发起rpc_register()方法调用
    if (0 == rsp.result().errcode())
    {
        std::cout << "rpc register response:" << rsp.success() << std::endl;
    }
    else
    {
        std::cout << "rpc register response error:" << rsp.result().errmsg() << std::endl;
    }

    return 0;
}